SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[SP_TXMVTO_CNTB_I43]                            
/*-------------------------------------------------------------------*/                            
/*----- Empresa           : OFISIS S.A.                          ----*/                            
/*----- Cliente           : OFISIS S.A.                          ----*/                            
/*----- Sistema           : Contabilidad                         ----*/                            
/*----- Modulo            : Empresa                              ----*/                            
/*----- Programa          : Ajuste por Diferencia de cambio Docs (CASO OFITESO - LINEA)----*/                            
/*----- Nombre            : SP_TXMVTO_CNTB_I43                   ----*/                            
/*----- Script            : TXMVTO_CNTB                          ----*/                            
/*----- Desarrollado por  : PDGV                                 ----*/                            
/*----- Fecha             :                                      ----*/                            
/*----- Base de Datos     : MS SQL Server                        ----*/                            
/*----- Version BD        : 8.0                                  ----*/                            
/*-------------------------------------------------------------------*/                            
/*-------------------------------------------------------------------*/              
/*----- Modificado 1 por : LMGP                                   ----*/              
/*----- Fecha Modifica   : 23/06/2006                            ----*/              
/*----- Detalle Modifica : SE AUMENTO VALIDACION PARA QUE EN CASO DOCUMENTOS 
DE LEASING GENERE DIFERENCIA DE CAMBIO EN UN LIBRO DE PROVISION 
LA CONDICION ES PARA QUE GENERE DIF DE CAMBIO: 
NO EXISTE EN EL LIBRO DE REG DE COMPRAS O SI EXISTE 
QUE ESTE EN LA TABLA DE DOCUMENTOS LEASING        ----*/              
/*-------------------------------------------------------------------*/   
/*-------------------------------------------------------------------*/                            
/*----- Drop proc SP_TXMVTO_CNTB_I43                             ----*/                            
/*----- Grant all on SP_TXMVTO_CNTB_I43 to PUBLIC                ----*/                            
/*----- SP_TXMVTO_CNTB_I43                                                                  
EXEC SP_TXMVTO_CNTB_I43  '01',1,'001','002',2004, 10, '0000000041'    
----*/                  
/*-------------------------------------------------------------------*/                            
@ISCO_EMPR           TD_VC_002,     
@ISCO_USUA_MODI      TD_VC_008,                       
@IDFE_USUA_MODI      TD_DT_001,                       
@INNU_CNTB_EMPR      TD_IN_001_CONT,                            
@ISCO_UNID_CNTB      TD_VC_003,                            
@ISCO_OPRC_CNTB      TD_VC_003,                            
@INNU_ANNO           TD_IN_004_ANNO,      
@INNU_MESE           TD_IN_002_MESE,                            
@ISNU_ASTO           TD_VC_010                            
  
As 
Declare                             
 @VSST_DFCA_LINE     TD_VC_001,                       
 @VSCO_EMPR          TD_VC_002,                            
 @VSST_TIPO_LETR     TD_VC_001,            
 @VSTI_AUXI_CLIE     TD_VC_001,            
 @VSTI_AUXI_PROV     TD_VC_001,            
 @VSST_ASIE_DFCA     TD_VC_003,             
 @VSCO_OPRC_DIFE     TD_VC_003,            
 @VSCO_OPRC_0004     TD_VC_003,             
 @VSID_DIFE          TD_VC_003,              
 @VSID_0004          TD_VC_003,            
 @VSID_BNCO          TD_VC_003,            
 @VSID_0006          TD_VC_003,            
 @CSCO_CNTA_EMPR     TD_VC_020,        
 @CSTI_AUXI_EMPR     TD_VC_001,        
 @CSCO_AUXI_EMPR     TD_VC_020,        
 @CSTI_DOCU          TD_VC_003,        
 @CSNU_DOCU          TD_VC_020,        
 @CDFE_ASTO_CNTB     TD_DT_001,        
 @CSST_CNTA_CAMB     TD_VC_003,        
 @CNNU_SECU          TD_IN_002,   
 @VSNU_ASTO          TD_VC_010,        
 @VSCO_MONE_VALI     TD_VC_003,
 @VSID_COMP_0001     TD_VC_003,
 @VSID_VENT_0001     TD_VC_003
        
 Select @VSCO_EMPR = ''               
            
 -- SACA LOS TIPOS DE AUXILIAR PARA CLIENTE Y PROVEEDOR             
 Select @VSTI_AUXI_CLIE = IsNull(CO_TIAU_CLIE, ''), @VSTI_AUXI_PROV = IsNull(CO_TIAU_PROV, '')            
 From TMPARA_TESO            
 Where CO_EMPR = @ISCO_EMPR             
            
 Select @VSST_DFCA_LINE = IsNull(ST_DFCA_LINE, ''), @VSST_ASIE_DFCA = IsNull(ST_ASIE_DFCA, '')              
 From TMPARA_CONT           
    
 Where CO_EMPR = @ISCO_EMPR               
 And NU_ANNO = 9999              

 Select @VSCO_MONE_VALI = ''        
 Select @VSID_COMP_0001 = ''
 Select @VSID_VENT_0001 = ''
 Select @VSID_0006 = IsNull(ID_0006, ''), @VSID_BNCO = IsNull(ID_BNCO, ''), 
 @VSCO_MONE_VALI = IsNull(CO_MONE, ''),
 @VSID_COMP_0001 = IsNull(ID_COMP,''), 
 @VSID_VENT_0001 = IsNull(ID_VENT,'')      
 From TTCNTB_EMPR            
 Where CO_EMPR = @ISCO_EMPR            
 And NU_CNTB_EMPR = @INNU_CNTB_EMPR            
    
--- EJECUTA SI DIF DE CAMBIO ES EN LINEA Y A LA VEZ SI EL DOC ESTA CANCELADO            
 If @VSST_DFCA_LINE = 'S'     
 Begin   
         
 Declare CU_TXMVTO_CNTB_I43_1 Cursor  For         
 Select t1.CO_CNTA_EMPR, t1.TI_AUXI_EMPR,t1.CO_AUXI_EMPR,t1.TI_DOCU, t1.NU_DOCU, t1.FE_ASTO_CNTB,        
        t2.ST_CNTA_CAMB, t1.NU_SECU        
 From TXMVTO_CNTB t1, TMPLAN_EMPR t2--, TTIDEN_CNTA t3        
 Where t1.CO_EMPR = @ISCO_EMPR        
 And t1.NU_CNTB_EMPR = @INNU_CNTB_EMPR        
 And t1.CO_UNID_CNTB = @ISCO_UNID_CNTB        
 And t1.CO_OPRC_CNTB = @ISCO_OPRC_CNTB        
 And t1.NU_ANNO  = @INNU_ANNO        
 And t1.NU_MESE  = @INNU_MESE        
 And t1.NU_ASTO = @ISNU_ASTO        
 And t1.SI_MVTO_CNTB =  'APR'        
 And IsNull(RTRIM(LTRIM(t1.NU_DOCU)), '') != ''        
 And t1.ST_DIFE_CAMB = 'N'        
 And t2.CO_EMPR = t1.CO_EMPR        
 And t2.CO_CNTA_EMPR = t1.CO_CNTA_EMPR        
 And t2.ST_DOCU_CNTB = 'S'
 And t2.ST_CNTA_MONE = 'S' 
 And t2.CO_MONE != @VSCO_MONE_VALI
 And t2.ST_CNTA_CTES = 'DOC' 
 Order By t1.NU_SECU        
    
 If @VSST_ASIE_DFCA = 'ORI'                
  Begin             
       
    Open CU_TXMVTO_CNTB_I43_1                  
    Fetch CU_TXMVTO_CNTB_I43_1 Into @CSCO_CNTA_EMPR, @CSTI_AUXI_EMPR, @CSCO_AUXI_EMPR,        
    @CSTI_DOCU, @CSNU_DOCU, @CDFE_ASTO_CNTB, @CSST_CNTA_CAMB, @CNNU_SECU        
    While @@Fetch_status = 0                  
     Begin          
     -- EVALUA SI ES LETRA  U OTRO DOCU.            
     Select @VSST_TIPO_LETR = IsNull(ST_DOCU_0006, '')            
     From TTDOCU_CNTB            
     Where TI_DOCU = @CSTI_DOCU             
    
     -- caso clientes            
     If @CSTI_AUXI_EMPR = @VSTI_AUXI_CLIE             
      Begin             
    
   -- SI ES LETRA             
   If @VSST_TIPO_LETR = 'S'             
     Select @VSCO_EMPR = IsNull(t1.CO_EMPR, '')            
     From TMLETR_CLIE t1, TTTIES_DOCU t2             
     Where t1.CO_EMPR = @ISCO_EMPR            
     And t1.NU_LETR_CLIE = @CSNU_DOCU            
     And t2.CO_ESTA_DOCU = t1.CO_ESTA_DOCU            
     And t2.ST_CANC = 'S'            
            
   If @VSST_TIPO_LETR != 'S'            
     Select @VSCO_EMPR = IsNull(t1.CO_EMPR, '')            
     From TMDOCU_CLIE t1, TTTIES_DOCU t2             
     Where t1.CO_EMPR = @ISCO_EMPR            
     And t1.CO_CLIE = @CSCO_AUXI_EMPR            
     And t1.CO_TIPO_DOCU = @CSTI_DOCU            
     And t1.NU_DOCU_CLIE = @CSNU_DOCU            
     And t2.CO_ESTA_DOCU = t1.CO_ESTA_DOCU            
     And t2.ST_CANC = 'S'            
   End             
 -- CASO PROVEEDORES             
 If @CSTI_AUXI_EMPR = @VSTI_AUXI_PROV            
   Begin             
   -- SI ES LETRA             
   If @VSST_TIPO_LETR = 'S'             
     Select @VSCO_EMPR = IsNull(t1.CO_EMPR, '')            
     From TMLETR_PROV t1, TTTIES_DOCU t2             
     Where t1.CO_EMPR = @ISCO_EMPR            
     And t1.CO_PROV = @CSCO_AUXI_EMPR            
     And t1.NU_LETR_PROV = @CSNU_DOCU            
     And t2.CO_ESTA_DOCU = t1.CO_ESTA_DOCU            
     And t2.ST_CANC = 'S'            
            
   If @VSST_TIPO_LETR != 'S'            
     Select @VSCO_EMPR = IsNull(t1.CO_EMPR, '')            
     From TMDOCU_PROV t1, TTTIES_DOCU t2             
     Where t1.CO_EMPR = @ISCO_EMPR 
     And t1.CO_PROV = @CSCO_AUXI_EMPR            
     And t1.CO_TIPO_DOCU = @CSTI_DOCU            
     And t1.NU_DOCU_PROV = @CSNU_DOCU            
     And t2.CO_ESTA_DOCU = t1.CO_ESTA_DOCU        
    And t2.ST_CANC = 'S'            
   End                                     
    
    
     If DataLength(Rtrim(@VSCO_EMPR)) > 0               
      Begin     


           If NOT Exists ( Select CO_OPRC_CNTB
			From TTIDEN_OPER
			Where CO_EMPR = @ISCO_EMPR
			And NU_CNTB_EMPR = @INNU_CNTB_EMPR
			And ID_OPRC IN ( @VSID_COMP_0001,@VSID_VENT_0001 )
			And CO_OPRC_CNTB = @ISCO_OPRC_CNTB  ) OR
 		Exists(  Select T1.CO_OPRC_CNTB  
                        From TTIDEN_OPER T1, TTTIPO_COPA T2 
                        Where T1.CO_EMPR = @ISCO_EMPR
                        And T1.NU_CNTB_EMPR = @INNU_CNTB_EMPR  
                        And T1.ID_OPRC IN ( @VSID_COMP_0001, @VSID_VENT_0001 )  
                        And T1.CO_OPRC_CNTB = @ISCO_OPRC_CNTB
                        AND T1.CO_EMPR = T2.CO_EMPR
                        AND T2.TI_COMP_PAGO = @CSTI_DOCU ) OR

		    (  Exists ( Select t2.CO_OPRC_CNTB
					From TTIDEN_OPER t2
					Where t2.CO_EMPR = @ISCO_EMPR
					And t2.NU_CNTB_EMPR = @INNU_CNTB_EMPR
					And t2.ID_OPRC IN ( @VSID_COMP_0001,@VSID_VENT_0001 )
					And t2.CO_OPRC_CNTB = @ISCO_OPRC_CNTB  )
		       AND  NOT Exists ( Select t2.CO_CNTA_EMPR
					From TTIDEN_CNTA t2
					Where t2.CO_EMPR = @ISCO_EMPR
					And t2.NU_CNTB_EMPR = @INNU_CNTB_EMPR
					And t2.ID_CNTA IN ( @VSID_COMP_0001,@VSID_VENT_0001 )
					And t2.CO_CNTA_EMPR = @CSCO_CNTA_EMPR )
		     )

	      Begin      
      Exec SP_TXMVTO_CNTB_I44 @ISCO_EMPR, @ISCO_USUA_MODI, @IDFE_USUA_MODI, @INNU_CNTB_EMPR, @ISCO_UNID_CNTB, @ISCO_OPRC_CNTB,                            
      @ISNU_ASTO, @CSCO_CNTA_EMPR, @CSST_CNTA_CAMB, @CDFE_ASTO_CNTB, @INNU_MESE, @INNU_ANNO,                            
      @CSTI_AUXI_EMPR, @CSCO_AUXI_EMPR, @CSTI_DOCU, @CSNU_DOCU, @CNNU_SECU, 0, 'S'             
              End  
      End     
        
     Fetch CU_TXMVTO_CNTB_I43_1 Into @CSCO_CNTA_EMPR, @CSTI_AUXI_EMPR, @CSCO_AUXI_EMPR,        
     @CSTI_DOCU, @CSNU_DOCU, @CDFE_ASTO_CNTB, @CSST_CNTA_CAMB, @CNNU_SECU        
     End        
    
Close CU_TXMVTO_CNTB_I43_1         
Deallocate CU_TXMVTO_CNTB_I43_1         
        
  End         
            
 If @VSST_ASIE_DFCA = 'COP'                
  Begin             
     Select @VSID_DIFE = IsNull(ID_DIFE, ''), @VSID_0004 = IsNull(ID_0004, '')            
     From TTCNTB_EMPR            
     Where CO_EMPR = @ISCO_EMPR            
     And NU_CNTB_EMPR = @INNU_CNTB_EMPR            
            
     Select @VSCO_OPRC_DIFE = IsNull(RTRIM(LTRIM(CO_OPRC_CNTB)), '')            
     From TTIDEN_OPER            
     Where CO_EMPR = @ISCO_EMPR            
     And NU_CNTB_EMPR = @INNU_CNTB_EMPR
     And ID_OPRC = @VSID_DIFE            
             
     Select @VSCO_OPRC_0004 = IsNull(RTRIM(LTRIM(CO_OPRC_CNTB)), '')            
     From TTIDEN_OPER            
     Where CO_EMPR = @ISCO_EMPR            
     And NU_CNTB_EMPR = @INNU_CNTB_EMPR
     And ID_OPRC = @VSID_0004            
            
    Open CU_TXMVTO_CNTB_I43_1                  
    Fetch CU_TXMVTO_CNTB_I43_1 Into @CSCO_CNTA_EMPR, @CSTI_AUXI_EMPR, @CSCO_AUXI_EMPR,        
    @CSTI_DOCU, @CSNU_DOCU, @CDFE_ASTO_CNTB, @CSST_CNTA_CAMB, @CNNU_SECU        
    While @@Fetch_status = 0                  
     Begin            
  
       -- ELIMINA EL ASTO DE DIF DE CAMBIO EXISTENTE PARA VOLVERLO A GENERAR  
        Delete From TXMVTO_CNTB  
        Where CO_EMPR = @ISCO_EMPR  
         And NU_CNTB_EMPR = @INNU_CNTB_EMPR  
         And CO_UNID_CNTB = @ISCO_UNID_CNTB  
         And NU_ANNO = @INNU_ANNO  
         And NU_MESE = @INNU_MESE  
         And CO_OPRC_CNTB = @VSCO_OPRC_DIFE --:FCOEMAA.sCO_OPRC_DIFE Or CO_OPRC_CNTB = :FCOEMAA.sCO_OPRC_0004)  
         And CO_UNID_ORIG = @ISCO_UNID_CNTB  
         And CO_OPRC_ORIG = @ISCO_OPRC_CNTB  
         And NU_ASTO_ORIG = @ISNU_ASTO  
         And NU_SECU_ORIG = @CNNU_SECU  
         And CO_CNTA_ORIG = @CSCO_CNTA_EMPR  
         And ST_DIFE_CAMB = 'S'  
         And SI_MVTO_CNTB = 'APR'   
   
     Select @VSNU_ASTO = 0  
     Select @VSNU_ASTO = Max(NU_ASTO)  
     From TXMVTO_CNTB  
     Where CO_EMPR = @ISCO_EMPR   
      And NU_CNTB_EMPR = @INNU_CNTB_EMPR   
      And CO_UNID_CNTB = @ISCO_UNID_CNTB   
      And CO_OPRC_CNTB = @VSCO_OPRC_DIFE   
      And NU_ANNO = @INNU_ANNO   
      And NU_MESE = @INNU_MESE   
  
     If @VSNU_ASTO Is NULL   
        Begin  
         Select @VSNU_ASTO = 0  
        End  
     Update TCFECH_PROC                  
     Set NU_ULTI_ASTO = Convert(Int, @VSNU_ASTO)                  
     Where CO_EMPR = @ISCO_EMPR   
      And NU_CNTB_EMPR = @INNU_CNTB_EMPR   
      And CO_UNID_CNTB = @ISCO_UNID_CNTB   
      And CO_OPRC_CNTB = @VSCO_OPRC_DIFE   
      And NU_ANNO = @INNU_ANNO   
      And NU_MESE = @INNU_MESE                   
      
 -- EVALUA SI ES LETRA  U OTRO DOCU.            
 Select @VSST_TIPO_LETR = IsNull(ST_DOCU_0006, '')            
 From TTDOCU_CNTB            
 Where TI_DOCU = @CSTI_DOCU             
      
 -- caso clientes            
 If @CSTI_AUXI_EMPR = @VSTI_AUXI_CLIE             
   Begin             
   -- SI ES LETRA             
   If @VSST_TIPO_LETR = 'S'             
     Select @VSCO_EMPR = IsNull(t1.CO_EMPR, '')            
     From TMLETR_CLIE t1, TTTIES_DOCU t2             
     Where t1.CO_EMPR = @ISCO_EMPR            
     And t1.NU_LETR_CLIE = @CSNU_DOCU            
     And t2.CO_ESTA_DOCU = t1.CO_ESTA_DOCU            
     And t2.ST_CANC = 'S'            
            
   If @VSST_TIPO_LETR != 'S'            
     Select @VSCO_EMPR = IsNull(t1.CO_EMPR, '')            
     From TMDOCU_CLIE t1, TTTIES_DOCU t2             
     Where t1.CO_EMPR = @ISCO_EMPR            
     And t1.CO_CLIE = @CSCO_AUXI_EMPR            
     And t1.CO_TIPO_DOCU = @CSTI_DOCU            
     And t1.NU_DOCU_CLIE = @CSNU_DOCU            
     And t2.CO_ESTA_DOCU = t1.CO_ESTA_DOCU            
     And t2.ST_CANC = 'S'            
   End             
 -- CASO PROVEEDORES             
 If @CSTI_AUXI_EMPR = @VSTI_AUXI_PROV            
   Begin             
   -- SI ES LETRA             
   If @VSST_TIPO_LETR = 'S'             
     Select @VSCO_EMPR = IsNull(t1.CO_EMPR, '')            
     From TMLETR_PROV t1, TTTIES_DOCU t2             
     Where t1.CO_EMPR = @ISCO_EMPR            
     And t1.CO_PROV = @CSCO_AUXI_EMPR            
     And t1.NU_LETR_PROV = @CSNU_DOCU            
     And t2.CO_ESTA_DOCU = t1.CO_ESTA_DOCU            
     And t2.ST_CANC = 'S'            
            
   If @VSST_TIPO_LETR != 'S'            
     Select @VSCO_EMPR = IsNull(t1.CO_EMPR, '')            
     From TMDOCU_PROV t1, TTTIES_DOCU t2             
     Where t1.CO_EMPR = @ISCO_EMPR            
     And t1.CO_PROV = @CSCO_AUXI_EMPR            
     And t1.CO_TIPO_DOCU = @CSTI_DOCU            
     And t1.NU_DOCU_PROV = @CSNU_DOCU            
     And t2.CO_ESTA_DOCU = t1.CO_ESTA_DOCU            
     And t2.ST_CANC = 'S'            
   End             
      
        If DataLength(Rtrim(@VSCO_EMPR)) > 0               
         Begin     
           If NOT Exists ( Select CO_OPRC_CNTB
			From TTIDEN_OPER
			Where CO_EMPR = @ISCO_EMPR
			And NU_CNTB_EMPR = @INNU_CNTB_EMPR
			And ID_OPRC IN ( @VSID_COMP_0001,@VSID_VENT_0001 )
			And CO_OPRC_CNTB = @ISCO_OPRC_CNTB  )
	      Begin  
              Exec SP_TXMVTO_CNTB_I45 @ISCO_EMPR, @ISCO_USUA_MODI, @IDFE_USUA_MODI, @INNU_CNTB_EMPR, @ISCO_UNID_CNTB, @VSCO_OPRC_DIFE,                            
              @VSCO_OPRC_0004, @CSCO_CNTA_EMPR, @CSST_CNTA_CAMB, @CDFE_ASTO_CNTB, @INNU_MESE,                            
              @INNU_ANNO, @CSTI_AUXI_EMPR, @CSCO_AUXI_EMPR, @CSTI_DOCU, @CSNU_DOCU, @ISCO_OPRC_CNTB,                       
              @ISNU_ASTO, @CNNU_SECU, 0, 'S'
              End 
         End     
        
     Fetch CU_TXMVTO_CNTB_I43_1 Into @CSCO_CNTA_EMPR, @CSTI_AUXI_EMPR, @CSCO_AUXI_EMPR,        
   @CSTI_DOCU, @CSNU_DOCU, @CDFE_ASTO_CNTB, @CSST_CNTA_CAMB, @CNNU_SECU        
     End             
        
     Close CU_TXMVTO_CNTB_I43_1         
     Deallocate CU_TXMVTO_CNTB_I43_1         
    
  End            
            
 End /*SI DIF DE CAMBIO ES EN LINEA*/                            
                   
Return                            
/*-------------------------------- Fin -----------------------------*/



GO
